#these libraries are ported here in case you remove the code and place elsewhere.
# install.packages('Signac','Seurat') # These packages often appear to be outdated/broken, so this line ensures up to date libraries before code running. 


#Load Libraries
library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
library(Seurat)
Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
Attaching SeuratObject
Attaching sp
library(patchwork)
library(data.table)
data.table 1.14.2 using 1 threads (see ?getDTthreads).  Latest news: r-datatable.com
**********
This installation of data.table has not detected OpenMP support. It should still work but in single-threaded mode.
This is a Mac. Please read https://mac.r-project.org/openmp/. Please engage with Apple and ask them for support. Check r-datatable.com for updates, and our Mac instructions here: https://github.com/Rdatatable/data.table/wiki/Installation. After several years of many reports of installation problems on Mac, it's time to gingerly point out that there have been no similar problems on Windows or Linux.
**********

Attaching package: ‘data.table’

The following objects are masked from ‘package:dplyr’:

    between, first, last
library(stringr)
library(ggplot2)
Want to understand how all the pieces fit together? Read R for
Data Science: https://r4ds.had.co.nz/
library(ggpubr)
library(openxlsx)
# set working directory
#set working directory 
setwd("~/OneDrive - Queen Mary, University of London/QMUL/Lab/Coding/data/R/Spatial/Scripts")

# load .rds file with pre-filtered data. 
kerats <- readRDS(file = "keratinocytes_only.rds")

kerats
An object of class Seurat 
16812 features across 1929 samples within 1 assay 
Active assay: RNA (16812 features, 2000 variable features)
 2 dimensional reductions calculated: pca, umap
# Visualize QC metrics as a violin plot
VlnPlot(kerats, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)


summary(kerats@meta.data)
  orig.ident          nCount_RNA     nFeature_RNA    percent.mt   
 Length:1929        Min.   :  700   Min.   : 501   Min.   :0.222  
 Class :character   1st Qu.: 1099   1st Qu.: 652   1st Qu.:1.824  
 Mode  :character   Median : 1644   Median : 898   Median :2.557  
                    Mean   : 3901   Mean   :1284   Mean   :2.597  
                    3rd Qu.: 3211   3rd Qu.:1450   3rd Qu.:3.353  
                    Max.   :63451   Max.   :7362   Max.   :4.997  
                                                                  
 RNA_snn_res.1.5 seurat_clusters RNA_snn_res.0.8
 0      :375     0      :593     0      :593    
 1      :220     1      :460     1      :460    
 2      :217     2      :450     2      :450    
 4      :186     5      :232     5      :232    
 5      :179     7      :194     7      :194    
 6      :168     3      :  0     3      :  0    
 (Other):584     (Other):  0     (Other):  0    

#run the PCA analysis of the dataset
kerats <- RunPCA(kerats, features = VariableFeatures(object = kerats))
Warning in PrepDR(object = object, features = features, verbose = verbose) :
  The following 1 features requested have zero variance (running reduction without them): Gm35167
PC_ 1 
Positive:  Fxyd2, Krt9, Atp1b1, Gpi1, Ftl1, Krt5, Atp2a3, Pglyrp1, Wfdc2, Mylpf 
       Plin2, Myl9, Rps18, Krt8, Tagln, Acta2, Slc12a2, Atp1a1, Krt19, Serpinf1 
       Hbb-bs, Tnni2, Igfbp4, Lyz2, Krt79, Htra3, Apod, Mfsd4a, Cldn3, Col3a1 
Negative:  Rnf227, Lce1m, Lce1d, Sdcbp2, Cpa4, Lce6a, Csta1, Gm94, Lce1c, Lce1i 
       Lce1a1, Flg, Atg9b, Smpd3, Lce1f, Kprp, Lce1b, Lce1h, Lce1g, Lce1e 
       2310050C09Rik, Nt5c3, Hrnr, Asprv1, Yod1, Lce1j, Lce1l, Mapk13, Lce1k, Lce1a2 
PC_ 2 
Positive:  Flg, Hrnr, Asprv1, Cdsn, Crct1, Lce1a2, Lce1b, 2310050C09Rik, Wfdc12, Lce1g 
       Lce1a1, Lce1h, Lce1l, Krt9, Lce1d, Lce1c, Kprp, Gm94, Mt4, Lce1i 
       Krtdap, Krt24, Lce1f, Lce1e, Dsg1a, Sprr1b, 2310046K23Rik, Lce1j, Krt2, Krt16 
Negative:  Atp1a1, Pi16, Ftl1, Eno1, Serping1, Gpi1, Myoc, Timp3, Apod, Sparc 
       Igfbp6, Serpinf1, Fxyd2, Tnxb, Acta2, Ccdc80, Atp2a3, Pmp22, Car12, Selenop 
       Fn1, Clec3b, Fmod, Myl9, Atp1b1, Pcolce, Igfbp5, Plin2, Cd248, Pfkp 
PC_ 3 
Positive:  Flg2, Lce1m, Gba2, Tsc22d2, Txnrd1, Plcxd1, Sdcbp2, Lce6a, Kctd4, 2210017I01Rik 
       Col1a1, Aif1l, Gpsm1, Fmo2, Tbc1d9, Rnf227, Plcxd2, Gm38119, Col1a2, Ccdc80 
       Smpd3, S100a8, Klk9, 3300005D01Rik, Col3a1, 4930511M18Rik, Plk3, Cfd, Gramd1c, Gm4316 
Negative:  Krt9, Krt24, Mt4, 4930438A08Rik, Dapl1, Dsg1a, Sprr1b, Rps24, Sfn, Rps27a 
       Dbi, Iffo2, Krt6a, Serpinb5, Odc1, Rpl36a, Rps12, Rps20, Rpl23, Wfdc12 
       Rpl30, Rpl21, Rps15a, Aqp3, Rpl9, Rps18, Rpl22, Rpl12, Rpl10, Rps2 
PC_ 4 
Positive:  Krt9, Krt16, Krt6b, Krt6a, Wfdc12, Gjb2, Tmem229b, S100a9, S100a8, Spink12 
       Rptn, Defb3, S100a7a, Igfbp2, Sprr1a, Sprr1b, Klk14, 2300002M23Rik, Wfdc18, Lce3c 
       Psors1c2, Pla2g4d, Serpina11, Akr1d1, 4930438A08Rik, Lce3f, Rnase2b, Sprr2k, Serpinb3a, 4833423E24Rik 
Negative:  Krt2, Ggct, Flg2, Orm1, Lce1m, Krtdap, Oas1f, Alox12e, Susd2, Casp14 
       Hal, Ano9, Tmprss4, Abhd12b, Wfdc21, Urah, Skint3, Krt15, Rdh9, Akr1c18 
       Ivl, Hcar2, Scgb1a1, Gan, Gm20627, Slc5a9, Smagp, Dapl1, Il20rb, Klk7 
PC_ 5 
Positive:  Krt9, Mapk13, Tbx1, Crnn, Spink7, Btc, Tbc1d23, 4930511M18Rik, 2310050C09Rik, Dmpk 
       Serpinb7, Xist, Dapl1, Gadd45a, Xkrx, Tmem229b, Igfbp2, Odc1, Iffo2, Nlrp10 
       Txnrd1, Lce1k, Krt24, Rnf227, Map3k8, Plcxd1, 1810037I17Rik, Atg9b, Stk10, 4930438A08Rik 
Negative:  S100a8, S100a9, Sprr2d, Cstdc5, Krt16, Krt6b, Sprr2b, Rptn, Psors1c2, Klk14 
       Arg1, Lce3a, 2300002M23Rik, Col3a1, Lce3f, Lce3b, Col1a1, Krtdap, Sprr2h, Degs2 
       Slpi, Fetub, Stfa3, Rnase2b, 2610528A11Rik, Urah, Klk9, Uox, Sprr2i, Col1a2 
# Examine and visualize PCA results a few different ways
print(kerats[["pca"]], dims = 1:5, nfeatures = 5)
PC_ 1 
Positive:  Fxyd2, Krt9, Atp1b1, Gpi1, Ftl1 
Negative:  Rnf227, Lce1m, Lce1d, Sdcbp2, Cpa4 
PC_ 2 
Positive:  Flg, Hrnr, Asprv1, Cdsn, Crct1 
Negative:  Atp1a1, Pi16, Ftl1, Eno1, Serping1 
PC_ 3 
Positive:  Flg2, Lce1m, Gba2, Tsc22d2, Txnrd1 
Negative:  Krt9, Krt24, Mt4, 4930438A08Rik, Dapl1 
PC_ 4 
Positive:  Krt9, Krt16, Krt6b, Krt6a, Wfdc12 
Negative:  Krt2, Ggct, Flg2, Orm1, Lce1m 
PC_ 5 
Positive:  Krt9, Mapk13, Tbx1, Crnn, Spink7 
Negative:  S100a8, S100a9, Sprr2d, Cstdc5, Krt16 

#elbow plot , shows SD of PCs, elbow is where significance should begin to be negligible.
ElbowPlot(kerats)


#pick 4 PCs
#Here is where we optimise the number of PCs used to cluster the cells, and the resolution of the clustering algorithm.
kerats <- FindNeighbors(kerats, dims = 1:4)
Computing nearest neighbor graph
Computing SNN
kerats <- FindClusters(kerats, resolution = 0.5)
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1929
Number of edges: 54403

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8151
Number of communities: 7
Elapsed time: 0 seconds
head(Idents(kerats), 5)
2.1_AAACCGTTCGTCCAGG-1 2.1_AAACTGCTGGCTCCAA-1 2.1_AAATCGTGTACCACAA-1 
                     6                      1                      2 
2.1_AACACACGCTCGCCGC-1 2.1_AACCGCTAAGGGATGC-1 
                     1                      1 
Levels: 0 1 2 3 4 5 6
#Plot UMAP
kerats <- RunUMAP(kerats, dims = 1:5)
Warning: The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
This message will be shown once per session
10:27:46 UMAP embedding parameters a = 0.9922 b = 1.112
10:27:46 Read 1929 rows and found 5 numeric columns
10:27:46 Using Annoy for neighbor search, n_neighbors = 30
10:27:46 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
10:27:47 Writing NN index file to temp file /var/folders/17/t98thp9n3zb7xfm2pnqtq84w0000gn/T//RtmpIQk9Fw/file1f4f73a1a0e0
10:27:47 Searching Annoy index using 1 thread, search_k = 3000
10:27:47 Annoy recall = 100%
10:27:48 Commencing smooth kNN distance calibration using 1 thread
10:27:49 Initializing from normalized Laplacian + noise
10:27:49 Commencing optimization for 500 epochs, with 71552 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
10:27:52 Optimization finished
DimPlot(kerats, reduction = "umap")

DimPlot(kerats, reduction = "pca")

# find markers for every cluster compared to all remaining cells, report only the positive ones using only.pos = TRUE
kerats.markers <- FindAllMarkers(kerats, only.pos = FALSE, min.pct = 0.25, logfc.threshold = 0.25)
Calculating cluster 0
For a more efficient implementation of the Wilcoxon Rank Sum Test,
(default method for FindMarkers) please install the limma package
--------------------------------------------
install.packages('BiocManager')
BiocManager::install('limma')
--------------------------------------------
After installation of limma, Seurat will automatically use the more 
efficient implementation (no further action necessary).
This message will be shown once per session

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~03s          
  |++                                                | 2 % ~03s          
  |++                                                | 3 % ~03s          
  |+++                                               | 4 % ~03s          
  |+++                                               | 6 % ~03s          
  |++++                                              | 7 % ~03s          
  |++++                                              | 8 % ~03s          
  |+++++                                             | 9 % ~03s          
  |+++++                                             | 10% ~03s          
  |++++++                                            | 11% ~03s          
  |+++++++                                           | 12% ~03s          
  |+++++++                                           | 13% ~03s          
  |++++++++                                          | 14% ~03s          
  |++++++++                                          | 16% ~03s          
  |+++++++++                                         | 17% ~03s          
  |+++++++++                                         | 18% ~03s          
  |++++++++++                                        | 19% ~02s          
  |++++++++++                                        | 20% ~02s          
  |+++++++++++                                       | 21% ~02s          
  |++++++++++++                                      | 22% ~02s          
  |++++++++++++                                      | 23% ~02s          
  |+++++++++++++                                     | 24% ~02s          
  |+++++++++++++                                     | 26% ~02s          
  |++++++++++++++                                    | 27% ~02s          
  |++++++++++++++                                    | 28% ~02s          
  |+++++++++++++++                                   | 29% ~02s          
  |+++++++++++++++                                   | 30% ~02s          
  |++++++++++++++++                                  | 31% ~02s          
  |+++++++++++++++++                                 | 32% ~02s          
  |+++++++++++++++++                                 | 33% ~02s          
  |++++++++++++++++++                                | 34% ~02s          
  |++++++++++++++++++                                | 36% ~02s          
  |+++++++++++++++++++                               | 37% ~02s          
  |+++++++++++++++++++                               | 38% ~02s          
  |++++++++++++++++++++                              | 39% ~02s          
  |++++++++++++++++++++                              | 40% ~02s          
  |+++++++++++++++++++++                             | 41% ~02s          
  |++++++++++++++++++++++                            | 42% ~02s          
  |++++++++++++++++++++++                            | 43% ~02s          
  |+++++++++++++++++++++++                           | 44% ~02s          
  |+++++++++++++++++++++++                           | 46% ~02s          
  |++++++++++++++++++++++++                          | 47% ~02s          
  |++++++++++++++++++++++++                          | 48% ~02s          
  |+++++++++++++++++++++++++                         | 49% ~01s          
  |+++++++++++++++++++++++++                         | 50% ~01s          
  |++++++++++++++++++++++++++                        | 51% ~01s          
  |+++++++++++++++++++++++++++                       | 52% ~01s          
  |+++++++++++++++++++++++++++                       | 53% ~01s          
  |++++++++++++++++++++++++++++                      | 54% ~01s          
  |++++++++++++++++++++++++++++                      | 56% ~01s          
  |+++++++++++++++++++++++++++++                     | 57% ~01s          
  |+++++++++++++++++++++++++++++                     | 58% ~01s          
  |++++++++++++++++++++++++++++++                    | 59% ~01s          
  |++++++++++++++++++++++++++++++                    | 60% ~01s          
  |+++++++++++++++++++++++++++++++                   | 61% ~01s          
  |++++++++++++++++++++++++++++++++                  | 62% ~01s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~01s          
  |++++++++++++++++++++++++++++++++++                | 67% ~01s          
  |++++++++++++++++++++++++++++++++++                | 68% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=03s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~02s          
  |++                                                | 3 % ~02s          
  |+++                                               | 4 % ~02s          
  |+++                                               | 6 % ~02s          
  |++++                                              | 7 % ~02s          
  |+++++                                             | 9 % ~02s          
  |++++++                                            | 10% ~02s          
  |++++++                                            | 12% ~02s          
  |+++++++                                           | 13% ~02s          
  |++++++++                                          | 15% ~02s          
  |+++++++++                                         | 16% ~02s          
  |+++++++++                                         | 18% ~02s          
  |++++++++++                                        | 19% ~02s          
  |+++++++++++                                       | 21% ~02s          
  |++++++++++++                                      | 22% ~02s          
  |++++++++++++                                      | 24% ~02s          
  |+++++++++++++                                     | 25% ~02s          
  |++++++++++++++                                    | 26% ~02s          
  |++++++++++++++                                    | 28% ~02s          
  |+++++++++++++++                                   | 29% ~02s          
  |++++++++++++++++                                  | 31% ~02s          
  |+++++++++++++++++                                 | 32% ~01s          
  |+++++++++++++++++                                 | 34% ~01s          
  |++++++++++++++++++                                | 35% ~01s          
  |+++++++++++++++++++                               | 37% ~01s          
  |++++++++++++++++++++                              | 38% ~01s          
  |++++++++++++++++++++                              | 40% ~01s          
  |+++++++++++++++++++++                             | 41% ~01s          
  |++++++++++++++++++++++                            | 43% ~01s          
  |+++++++++++++++++++++++                           | 44% ~01s          
  |+++++++++++++++++++++++                           | 46% ~01s          
  |++++++++++++++++++++++++                          | 47% ~01s          
  |+++++++++++++++++++++++++                         | 49% ~01s          
  |+++++++++++++++++++++++++                         | 50% ~01s          
  |++++++++++++++++++++++++++                        | 51% ~01s          
  |+++++++++++++++++++++++++++                       | 53% ~01s          
  |++++++++++++++++++++++++++++                      | 54% ~01s          
  |++++++++++++++++++++++++++++                      | 56% ~01s          
  |+++++++++++++++++++++++++++++                     | 57% ~01s          
  |++++++++++++++++++++++++++++++                    | 59% ~01s          
  |+++++++++++++++++++++++++++++++                   | 60% ~01s          
  |+++++++++++++++++++++++++++++++                   | 62% ~01s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
  |++++++++++++++++++++++++++++++++++                | 66% ~01s          
  |++++++++++++++++++++++++++++++++++                | 68% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=02s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~02s          
  |++                                                | 3 % ~01s          
  |++                                                | 4 % ~01s          
  |+++                                               | 5 % ~01s          
  |++++                                              | 7 % ~01s          
  |++++                                              | 8 % ~01s          
  |+++++                                             | 9 % ~01s          
  |++++++                                            | 11% ~01s          
  |++++++                                            | 12% ~01s          
  |+++++++                                           | 13% ~01s          
  |++++++++                                          | 14% ~01s          
  |++++++++                                          | 16% ~01s          
  |+++++++++                                         | 17% ~01s          
  |++++++++++                                        | 18% ~01s          
  |++++++++++                                        | 20% ~01s          
  |+++++++++++                                       | 21% ~01s          
  |++++++++++++                                      | 22% ~01s          
  |++++++++++++                                      | 24% ~01s          
  |+++++++++++++                                     | 25% ~01s          
  |++++++++++++++                                    | 26% ~01s          
  |++++++++++++++                                    | 28% ~01s          
  |+++++++++++++++                                   | 29% ~01s          
  |++++++++++++++++                                  | 30% ~01s          
  |++++++++++++++++                                  | 32% ~01s          
  |+++++++++++++++++                                 | 33% ~01s          
  |++++++++++++++++++                                | 34% ~01s          
  |++++++++++++++++++                                | 36% ~01s          
  |+++++++++++++++++++                               | 37% ~01s          
  |++++++++++++++++++++                              | 38% ~01s          
  |++++++++++++++++++++                              | 39% ~01s          
  |+++++++++++++++++++++                             | 41% ~01s          
  |++++++++++++++++++++++                            | 42% ~01s          
  |++++++++++++++++++++++                            | 43% ~01s          
  |+++++++++++++++++++++++                           | 45% ~01s          
  |++++++++++++++++++++++++                          | 46% ~01s          
  |++++++++++++++++++++++++                          | 47% ~01s          
  |+++++++++++++++++++++++++                         | 49% ~01s          
  |+++++++++++++++++++++++++                         | 50% ~01s          
  |++++++++++++++++++++++++++                        | 51% ~01s          
  |+++++++++++++++++++++++++++                       | 53% ~01s          
  |+++++++++++++++++++++++++++                       | 54% ~01s          
  |++++++++++++++++++++++++++++                      | 55% ~01s          
  |+++++++++++++++++++++++++++++                     | 57% ~01s          
  |+++++++++++++++++++++++++++++                     | 58% ~01s          
  |++++++++++++++++++++++++++++++                    | 59% ~01s          
  |+++++++++++++++++++++++++++++++                   | 61% ~01s          
  |+++++++++++++++++++++++++++++++                   | 62% ~01s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~01s          
  |++                                                | 3 % ~01s          
  |+++                                               | 4 % ~01s          
  |+++                                               | 6 % ~01s          
  |++++                                              | 7 % ~02s          
  |+++++                                             | 9 % ~01s          
  |+++++                                             | 10% ~01s          
  |++++++                                            | 11% ~01s          
  |+++++++                                           | 13% ~01s          
  |++++++++                                          | 14% ~01s          
  |++++++++                                          | 16% ~01s          
  |+++++++++                                         | 17% ~01s          
  |++++++++++                                        | 19% ~01s          
  |++++++++++                                        | 20% ~01s          
  |+++++++++++                                       | 21% ~01s          
  |++++++++++++                                      | 23% ~01s          
  |+++++++++++++                                     | 24% ~01s          
  |+++++++++++++                                     | 26% ~01s          
  |++++++++++++++                                    | 27% ~01s          
  |+++++++++++++++                                   | 29% ~01s          
  |+++++++++++++++                                   | 30% ~01s          
  |++++++++++++++++                                  | 31% ~01s          
  |+++++++++++++++++                                 | 33% ~01s          
  |++++++++++++++++++                                | 34% ~01s          
  |++++++++++++++++++                                | 36% ~01s          
  |+++++++++++++++++++                               | 37% ~01s          
  |++++++++++++++++++++                              | 39% ~01s          
  |++++++++++++++++++++                              | 40% ~01s          
  |+++++++++++++++++++++                             | 41% ~01s          
  |++++++++++++++++++++++                            | 43% ~01s          
  |+++++++++++++++++++++++                           | 44% ~01s          
  |+++++++++++++++++++++++                           | 46% ~01s          
  |++++++++++++++++++++++++                          | 47% ~01s          
  |+++++++++++++++++++++++++                         | 49% ~01s          
  |+++++++++++++++++++++++++                         | 50% ~01s          
  |++++++++++++++++++++++++++                        | 51% ~01s          
  |+++++++++++++++++++++++++++                       | 53% ~01s          
  |++++++++++++++++++++++++++++                      | 54% ~01s          
  |++++++++++++++++++++++++++++                      | 56% ~01s          
  |+++++++++++++++++++++++++++++                     | 57% ~01s          
  |++++++++++++++++++++++++++++++                    | 59% ~01s          
  |++++++++++++++++++++++++++++++                    | 60% ~01s          
  |+++++++++++++++++++++++++++++++                   | 61% ~01s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~01s          
  |++++++++++++++++++++++++++++++++++                | 67% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=02s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~15s          
  |++                                                | 2 % ~14s          
  |++                                                | 3 % ~13s          
  |+++                                               | 4 % ~13s          
  |+++                                               | 5 % ~12s          
  |++++                                              | 6 % ~12s          
  |++++                                              | 7 % ~11s          
  |+++++                                             | 8 % ~11s          
  |+++++                                             | 9 % ~11s          
  |++++++                                            | 10% ~10s          
  |++++++                                            | 11% ~10s          
  |+++++++                                           | 12% ~10s          
  |+++++++                                           | 13% ~10s          
  |++++++++                                          | 14% ~10s          
  |++++++++                                          | 15% ~09s          
  |+++++++++                                         | 16% ~09s          
  |+++++++++                                         | 17% ~09s          
  |++++++++++                                        | 18% ~09s          
  |++++++++++                                        | 19% ~09s          
  |+++++++++++                                       | 20% ~09s          
  |+++++++++++                                       | 21% ~09s          
  |++++++++++++                                      | 22% ~09s          
  |++++++++++++                                      | 23% ~09s          
  |+++++++++++++                                     | 24% ~09s          
  |+++++++++++++                                     | 25% ~09s          
  |++++++++++++++                                    | 26% ~09s          
  |++++++++++++++                                    | 27% ~08s          
  |+++++++++++++++                                   | 28% ~08s          
  |+++++++++++++++                                   | 29% ~08s          
  |++++++++++++++++                                  | 30% ~08s          
  |++++++++++++++++                                  | 31% ~08s          
  |+++++++++++++++++                                 | 32% ~08s          
  |+++++++++++++++++                                 | 33% ~08s          
  |++++++++++++++++++                                | 34% ~07s          
  |++++++++++++++++++                                | 35% ~07s          
  |+++++++++++++++++++                               | 36% ~07s          
  |+++++++++++++++++++                               | 37% ~07s          
  |++++++++++++++++++++                              | 38% ~07s          
  |++++++++++++++++++++                              | 39% ~07s          
  |+++++++++++++++++++++                             | 40% ~07s          
  |+++++++++++++++++++++                             | 41% ~07s          
  |++++++++++++++++++++++                            | 42% ~06s          
  |++++++++++++++++++++++                            | 43% ~06s          
  |+++++++++++++++++++++++                           | 44% ~06s          
  |+++++++++++++++++++++++                           | 45% ~06s          
  |++++++++++++++++++++++++                          | 46% ~06s          
  |++++++++++++++++++++++++                          | 47% ~06s          
  |+++++++++++++++++++++++++                         | 48% ~06s          
  |+++++++++++++++++++++++++                         | 49% ~06s          
  |++++++++++++++++++++++++++                        | 51% ~06s          
  |++++++++++++++++++++++++++                        | 52% ~05s          
  |+++++++++++++++++++++++++++                       | 53% ~05s          
  |+++++++++++++++++++++++++++                       | 54% ~05s          
  |++++++++++++++++++++++++++++                      | 55% ~05s          
  |++++++++++++++++++++++++++++                      | 56% ~05s          
  |+++++++++++++++++++++++++++++                     | 57% ~05s          
  |+++++++++++++++++++++++++++++                     | 58% ~05s          
  |++++++++++++++++++++++++++++++                    | 59% ~05s          
  |++++++++++++++++++++++++++++++                    | 60% ~05s          
  |+++++++++++++++++++++++++++++++                   | 61% ~04s          
  |+++++++++++++++++++++++++++++++                   | 62% ~04s          
  |++++++++++++++++++++++++++++++++                  | 63% ~04s          
  |++++++++++++++++++++++++++++++++                  | 64% ~04s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~04s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~04s          
  |++++++++++++++++++++++++++++++++++                | 67% ~04s          
  |++++++++++++++++++++++++++++++++++                | 68% ~04s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~04s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~03s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~03s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~03s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~03s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=11s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~03s          
  |++                                                | 2 % ~02s          
  |++                                                | 4 % ~02s          
  |+++                                               | 5 % ~02s          
  |+++                                               | 6 % ~02s          
  |++++                                              | 7 % ~02s          
  |+++++                                             | 8 % ~02s          
  |+++++                                             | 9 % ~03s          
  |++++++                                            | 11% ~03s          
  |++++++                                            | 12% ~03s          
  |+++++++                                           | 13% ~03s          
  |++++++++                                          | 14% ~03s          
  |++++++++                                          | 15% ~03s          
  |+++++++++                                         | 16% ~02s          
  |+++++++++                                         | 18% ~02s          
  |++++++++++                                        | 19% ~03s          
  |++++++++++                                        | 20% ~02s          
  |+++++++++++                                       | 21% ~02s          
  |++++++++++++                                      | 22% ~02s          
  |++++++++++++                                      | 24% ~02s          
  |+++++++++++++                                     | 25% ~02s          
  |+++++++++++++                                     | 26% ~02s          
  |++++++++++++++                                    | 27% ~02s          
  |+++++++++++++++                                   | 28% ~02s          
  |+++++++++++++++                                   | 29% ~02s          
  |++++++++++++++++                                  | 31% ~02s          
  |++++++++++++++++                                  | 32% ~02s          
  |+++++++++++++++++                                 | 33% ~02s          
  |++++++++++++++++++                                | 34% ~02s          
  |++++++++++++++++++                                | 35% ~02s          
  |+++++++++++++++++++                               | 36% ~02s          
  |+++++++++++++++++++                               | 38% ~02s          
  |++++++++++++++++++++                              | 39% ~02s          
  |++++++++++++++++++++                              | 40% ~02s          
  |+++++++++++++++++++++                             | 41% ~02s          
  |++++++++++++++++++++++                            | 42% ~02s          
  |++++++++++++++++++++++                            | 44% ~02s          
  |+++++++++++++++++++++++                           | 45% ~02s          
  |+++++++++++++++++++++++                           | 46% ~01s          
  |++++++++++++++++++++++++                          | 47% ~01s          
  |+++++++++++++++++++++++++                         | 48% ~01s          
  |+++++++++++++++++++++++++                         | 49% ~01s          
  |++++++++++++++++++++++++++                        | 51% ~01s          
  |++++++++++++++++++++++++++                        | 52% ~01s          
  |+++++++++++++++++++++++++++                       | 53% ~01s          
  |++++++++++++++++++++++++++++                      | 54% ~01s          
  |++++++++++++++++++++++++++++                      | 55% ~01s          
  |+++++++++++++++++++++++++++++                     | 56% ~01s          
  |+++++++++++++++++++++++++++++                     | 58% ~01s          
  |++++++++++++++++++++++++++++++                    | 59% ~01s          
  |++++++++++++++++++++++++++++++                    | 60% ~01s          
  |+++++++++++++++++++++++++++++++                   | 61% ~01s          
  |++++++++++++++++++++++++++++++++                  | 62% ~01s          
  |++++++++++++++++++++++++++++++++                  | 64% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~01s          
  |++++++++++++++++++++++++++++++++++                | 67% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=03s  
Calculating cluster 6

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~01s          
  |++                                                | 2 % ~01s          
  |++                                                | 4 % ~01s          
  |+++                                               | 5 % ~01s          
  |++++                                              | 6 % ~01s          
  |++++                                              | 7 % ~01s          
  |+++++                                             | 8 % ~01s          
  |+++++                                             | 10% ~01s          
  |++++++                                            | 11% ~01s          
  |+++++++                                           | 12% ~01s          
  |+++++++                                           | 13% ~01s          
  |++++++++                                          | 14% ~01s          
  |++++++++                                          | 16% ~01s          
  |+++++++++                                         | 17% ~01s          
  |++++++++++                                        | 18% ~01s          
  |++++++++++                                        | 19% ~01s          
  |+++++++++++                                       | 20% ~01s          
  |+++++++++++                                       | 22% ~01s          
  |++++++++++++                                      | 23% ~01s          
  |+++++++++++++                                     | 24% ~01s          
  |+++++++++++++                                     | 25% ~01s          
  |++++++++++++++                                    | 27% ~01s          
  |++++++++++++++                                    | 28% ~01s          
  |+++++++++++++++                                   | 29% ~01s          
  |++++++++++++++++                                  | 30% ~01s          
  |++++++++++++++++                                  | 31% ~01s          
  |+++++++++++++++++                                 | 33% ~01s          
  |+++++++++++++++++                                 | 34% ~01s          
  |++++++++++++++++++                                | 35% ~01s          
  |+++++++++++++++++++                               | 36% ~01s          
  |+++++++++++++++++++                               | 37% ~01s          
  |++++++++++++++++++++                              | 39% ~01s          
  |++++++++++++++++++++                              | 40% ~01s          
  |+++++++++++++++++++++                             | 41% ~01s          
  |++++++++++++++++++++++                            | 42% ~01s          
  |++++++++++++++++++++++                            | 43% ~01s          
  |+++++++++++++++++++++++                           | 45% ~01s          
  |+++++++++++++++++++++++                           | 46% ~01s          
  |++++++++++++++++++++++++                          | 47% ~01s          
  |+++++++++++++++++++++++++                         | 48% ~01s          
  |+++++++++++++++++++++++++                         | 49% ~01s          
  |++++++++++++++++++++++++++                        | 51% ~01s          
  |++++++++++++++++++++++++++                        | 52% ~01s          
  |+++++++++++++++++++++++++++                       | 53% ~01s          
  |++++++++++++++++++++++++++++                      | 54% ~01s          
  |++++++++++++++++++++++++++++                      | 55% ~01s          
  |+++++++++++++++++++++++++++++                     | 57% ~01s          
  |+++++++++++++++++++++++++++++                     | 58% ~01s          
  |++++++++++++++++++++++++++++++                    | 59% ~01s          
  |+++++++++++++++++++++++++++++++                   | 60% ~01s          
  |+++++++++++++++++++++++++++++++                   | 61% ~01s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |++++++++++++++++++++++++++++++++                  | 64% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
  |++++++++++++++++++++++++++++++++++                | 66% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01s  
kerats.markers %>% group_by(cluster) %>% top_n(n = 2, wt = avg_log2FC)

cluster_markers <- kerats.markers %>% group_by(cluster) %>% filter(!between(avg_log2FC, -0.6, 0.6) & p_val_adj < 0.05)


top_markers <- kerats.markers %>% group_by(cluster) %>% filter(!between(avg_log2FC, -1, 1) & p_val_adj < 0.05)

#write out markers to excel file. Cosnider using CSV as these are easier to manipulate.

write.xlsx(cluster_markers,"kerats_allcluster_markers.xlsx")
# https://scrnaseq-course.cog.sanger.ac.uk/website/seurat-chapter.html
# has a tutorial explaining these things
#Lower Keratinocyte markers
VlnPlot(kerats, features = c("Krt10"))

VlnPlot(kerats, features = c("Krt1"))

VlnPlot(kerats, features = c("Dsp"))

VlnPlot(kerats, features = c("Krt14"))

#upper epidermis
VlnPlot(kerats, features = c("Lor"))

VlnPlot(kerats, features = c("Flg"))

VlnPlot(kerats, features = c("Hrnr"))

VlnPlot(kerats, features = c("Cdsn"))

VlnPlot(kerats, features = c("Ivl"))

VlnPlot(kerats, features = c("Slurp1"))

VlnPlot(kerats, features = c("Crnn"))

DimPlot(kerats)

FeaturePlot(kerats, features = "Lor", label = TRUE)

FeaturePlot(kerats, features = "Flg", label = TRUE)



FeaturePlot(kerats, features = "Lce1m", label = TRUE)


FeaturePlot(kerats, features = "Trp63", label = TRUE)

#actin binding genes and GOIs
VlnPlot(kerats, features = c("Sptbn2"))

VlnPlot(kerats, features = c("Amotl2"))

VlnPlot(kerats, features = c("Anxa1"))

VlnPlot(kerats, features = c("Tmsb4x"))


VlnPlot(kerats, features = c("Lmna"))

NA
NA
NA
NA
NA
DimPlot(kerats)

FeaturePlot(kerats, features = "Sptbn2", label = TRUE)

FeaturePlot(kerats, features = "Amotl2", label = TRUE)



FeaturePlot(kerats, features = "Tmsb4x", label = TRUE)


FeaturePlot(kerats, features = "Anxa1", label = TRUE)

kerat_marker_gene <- "Lor"
list_of_features <- c("Sptbn2","Tmsb4x","Amotl2","Anxa1")

# Parse list_of_features to featurescatter

for (gene in list_of_features){

  p <- FeatureScatter(kerats, feature1 = (kerat_marker_gene), feature2 = (gene))
  print(p)
}


# Use this line to see single feature plot, for ease. 
#FeatureScatter(kerats, feature1 = kerat_marker_gene, feature2 = "Sptbn2")
# #Dermal Fib markers
# # https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6204438/#:~:text=These%20different%20dermal%20fibroblast%20cell,et%20al.%2C%202018).
# VlnPlot(kerats, features = c("Dpp4")) #CD26
# 
# VlnPlot(kerats, features = c("Thy1")) #CD90 - dermal fib marker
# VlnPlot(kerats, features = c("Vim"))
# 
# #cluster 4 is fibroblasts, need to remove. 
# #SET IDENTS THAT ARE TO BE REMOVED BASED ON THIS INFO
# extracted_clusters <- c("0", "1", "2", "3", "5")
# 
# #subset seurat object
# keratinocytes <- subset(kerats, idents = extracted_clusters)
# keratinocytes
# 
# saveRDS(keratinocytes, file = "keratinocytes_only.rds")
# set working directory
#set working directory 
setwd("~/OneDrive - Queen Mary, University of London/QMUL/Lab/Coding/data/R/Spatial/Scripts")

# load .rds file with pre-filtered data. 
kerats <- readRDS(file = "keratinocytes_only.rds")

kerats
An object of class Seurat 
16812 features across 1929 samples within 1 assay 
Active assay: RNA (16812 features, 2000 variable features)
 2 dimensional reductions calculated: pca, umap
# Visualize QC metrics as a violin plot
VlnPlot(kerats, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)


summary(kerats@meta.data)
  orig.ident          nCount_RNA     nFeature_RNA    percent.mt   
 Length:1929        Min.   :  700   Min.   : 501   Min.   :0.222  
 Class :character   1st Qu.: 1099   1st Qu.: 652   1st Qu.:1.824  
 Mode  :character   Median : 1644   Median : 898   Median :2.557  
                    Mean   : 3901   Mean   :1284   Mean   :2.597  
                    3rd Qu.: 3211   3rd Qu.:1450   3rd Qu.:3.353  
                    Max.   :63451   Max.   :7362   Max.   :4.997  
                                                                  
 RNA_snn_res.1.5 seurat_clusters RNA_snn_res.0.8
 0      :375     0      :593     0      :593    
 1      :220     1      :460     1      :460    
 2      :217     2      :450     2      :450    
 4      :186     5      :232     5      :232    
 5      :179     7      :194     7      :194    
 6      :168     3      :  0     3      :  0    
 (Other):584     (Other):  0     (Other):  0    

#run the PCA analysis of the dataset
kerats <- RunPCA(kerats, features = VariableFeatures(object = kerats))
Warning in PrepDR(object = object, features = features, verbose = verbose) :
  The following 1 features requested have zero variance (running reduction without them): Gm35167
PC_ 1 
Positive:  Fxyd2, Krt9, Atp1b1, Gpi1, Ftl1, Krt5, Atp2a3, Pglyrp1, Wfdc2, Mylpf 
       Plin2, Myl9, Rps18, Krt8, Tagln, Acta2, Slc12a2, Atp1a1, Krt19, Serpinf1 
       Hbb-bs, Tnni2, Igfbp4, Lyz2, Krt79, Htra3, Apod, Mfsd4a, Cldn3, Col3a1 
Negative:  Rnf227, Lce1m, Lce1d, Sdcbp2, Cpa4, Lce6a, Csta1, Gm94, Lce1c, Lce1i 
       Lce1a1, Flg, Atg9b, Smpd3, Lce1f, Kprp, Lce1b, Lce1h, Lce1g, Lce1e 
       2310050C09Rik, Nt5c3, Hrnr, Asprv1, Yod1, Lce1j, Lce1l, Mapk13, Lce1k, Lce1a2 
PC_ 2 
Positive:  Flg, Hrnr, Asprv1, Cdsn, Crct1, Lce1a2, Lce1b, 2310050C09Rik, Wfdc12, Lce1g 
       Lce1a1, Lce1h, Lce1l, Krt9, Lce1d, Lce1c, Kprp, Gm94, Mt4, Lce1i 
       Krtdap, Krt24, Lce1f, Lce1e, Dsg1a, Sprr1b, 2310046K23Rik, Lce1j, Krt2, Krt16 
Negative:  Atp1a1, Pi16, Ftl1, Eno1, Serping1, Gpi1, Myoc, Timp3, Apod, Sparc 
       Igfbp6, Serpinf1, Fxyd2, Tnxb, Acta2, Ccdc80, Atp2a3, Pmp22, Car12, Selenop 
       Fn1, Clec3b, Fmod, Myl9, Atp1b1, Pcolce, Igfbp5, Plin2, Cd248, Pfkp 
PC_ 3 
Positive:  Flg2, Lce1m, Gba2, Tsc22d2, Txnrd1, Plcxd1, Sdcbp2, Lce6a, Kctd4, 2210017I01Rik 
       Col1a1, Aif1l, Gpsm1, Fmo2, Tbc1d9, Rnf227, Plcxd2, Gm38119, Col1a2, Ccdc80 
       Smpd3, S100a8, Klk9, 3300005D01Rik, Col3a1, 4930511M18Rik, Plk3, Cfd, Gramd1c, Gm4316 
Negative:  Krt9, Krt24, Mt4, 4930438A08Rik, Dapl1, Dsg1a, Sprr1b, Rps24, Sfn, Rps27a 
       Dbi, Iffo2, Krt6a, Serpinb5, Odc1, Rpl36a, Rps12, Rps20, Rpl23, Wfdc12 
       Rpl30, Rpl21, Rps15a, Aqp3, Rpl9, Rps18, Rpl22, Rpl12, Rpl10, Rps2 
PC_ 4 
Positive:  Krt9, Krt16, Krt6b, Krt6a, Wfdc12, Gjb2, Tmem229b, S100a9, S100a8, Spink12 
       Rptn, Defb3, S100a7a, Igfbp2, Sprr1a, Sprr1b, Klk14, 2300002M23Rik, Wfdc18, Lce3c 
       Psors1c2, Pla2g4d, Serpina11, Akr1d1, 4930438A08Rik, Lce3f, Rnase2b, Sprr2k, Serpinb3a, 4833423E24Rik 
Negative:  Krt2, Ggct, Flg2, Orm1, Lce1m, Krtdap, Oas1f, Alox12e, Susd2, Casp14 
       Hal, Ano9, Tmprss4, Abhd12b, Wfdc21, Urah, Skint3, Krt15, Rdh9, Akr1c18 
       Ivl, Hcar2, Scgb1a1, Gan, Gm20627, Slc5a9, Smagp, Dapl1, Il20rb, Klk7 
PC_ 5 
Positive:  Krt9, Mapk13, Tbx1, Crnn, Spink7, Btc, Tbc1d23, 4930511M18Rik, 2310050C09Rik, Dmpk 
       Serpinb7, Xist, Dapl1, Gadd45a, Xkrx, Tmem229b, Igfbp2, Odc1, Iffo2, Nlrp10 
       Txnrd1, Lce1k, Krt24, Rnf227, Map3k8, Plcxd1, 1810037I17Rik, Atg9b, Stk10, 4930438A08Rik 
Negative:  S100a8, S100a9, Sprr2d, Cstdc5, Krt16, Krt6b, Sprr2b, Rptn, Psors1c2, Klk14 
       Arg1, Lce3a, 2300002M23Rik, Col3a1, Lce3f, Lce3b, Col1a1, Krtdap, Sprr2h, Degs2 
       Slpi, Fetub, Stfa3, Rnase2b, 2610528A11Rik, Urah, Klk9, Uox, Sprr2i, Col1a2 
# Examine and visualize PCA results a few different ways
print(kerats[["pca"]], dims = 1:5, nfeatures = 5)
PC_ 1 
Positive:  Fxyd2, Krt9, Atp1b1, Gpi1, Ftl1 
Negative:  Rnf227, Lce1m, Lce1d, Sdcbp2, Cpa4 
PC_ 2 
Positive:  Flg, Hrnr, Asprv1, Cdsn, Crct1 
Negative:  Atp1a1, Pi16, Ftl1, Eno1, Serping1 
PC_ 3 
Positive:  Flg2, Lce1m, Gba2, Tsc22d2, Txnrd1 
Negative:  Krt9, Krt24, Mt4, 4930438A08Rik, Dapl1 
PC_ 4 
Positive:  Krt9, Krt16, Krt6b, Krt6a, Wfdc12 
Negative:  Krt2, Ggct, Flg2, Orm1, Lce1m 
PC_ 5 
Positive:  Krt9, Mapk13, Tbx1, Crnn, Spink7 
Negative:  S100a8, S100a9, Sprr2d, Cstdc5, Krt16 

#elbow plot , shows SD of PCs, elbow is where significance should begin to be negligible.
ElbowPlot(kerats)


#pick 6 PCs
#Here is where we optimise the number of PCs used to cluster the cells, and the resolution of the clustering algorithm.
kerats <- FindNeighbors(kerats, dims = 1:6)
Computing nearest neighbor graph
Computing SNN
kerats <- FindClusters(kerats, resolution = 0.5)
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 1929
Number of edges: 58306

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.7987
Number of communities: 6
Elapsed time: 0 seconds
head(Idents(kerats), 5)
2.1_AAACCGTTCGTCCAGG-1 2.1_AAACTGCTGGCTCCAA-1 2.1_AAATCGTGTACCACAA-1 
                     3                      2                      1 
2.1_AACACACGCTCGCCGC-1 2.1_AACCGCTAAGGGATGC-1 
                     2                      2 
Levels: 0 1 2 3 4 5
#Plot UMAP
kerats <- RunUMAP(kerats, dims = 1:5)
10:29:26 UMAP embedding parameters a = 0.9922 b = 1.112
10:29:26 Read 1929 rows and found 5 numeric columns
10:29:26 Using Annoy for neighbor search, n_neighbors = 30
10:29:26 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
10:29:27 Writing NN index file to temp file /var/folders/17/t98thp9n3zb7xfm2pnqtq84w0000gn/T//RtmpIQk9Fw/file1f4f3f77af30
10:29:27 Searching Annoy index using 1 thread, search_k = 3000
10:29:27 Annoy recall = 100%
10:29:28 Commencing smooth kNN distance calibration using 1 thread
10:29:29 Initializing from normalized Laplacian + noise
10:29:29 Commencing optimization for 500 epochs, with 71552 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
10:29:33 Optimization finished
DimPlot(kerats, reduction = "umap")

DimPlot(kerats, reduction = "pca")

#Keratinocyte markers
VlnPlot(kerats, features = c("Lor"))

VlnPlot(kerats, features = c("Ivl"))

VlnPlot(kerats, features = c("Flg"))


VlnPlot(kerats, features = c("Krt10"))

VlnPlot(kerats, features = c("Krt5"))

VlnPlot(kerats, features = c("Slurp1"))

VlnPlot(kerats, features = c("Crnn"))

NA
NA
NA
#Keratinocyte markers
VlnPlot(kerats, features = c("Sptbn2"))

VlnPlot(kerats, features = c("Amotl2"))

VlnPlot(kerats, features = c("Anxa1"))

VlnPlot(kerats, features = c("Tmsb4x"))


VlnPlot(kerats, features = c("Lmna"))

NA
NA
NA
NA
NA
DimPlot(kerats)

FeaturePlot(kerats, features = "Lor", label = TRUE)

FeaturePlot(kerats, features = "Flg", label = TRUE)



FeaturePlot(kerats, features = "Lce1m", label = TRUE)


FeaturePlot(kerats, features = "Trp63", label = TRUE)

DimPlot(kerats)

FeaturePlot(kerats, features = "Anxa1", label = TRUE)

FeaturePlot(kerats, features = "Sptbn2", label = TRUE)

FeaturePlot(kerats, features = "Amotl2", label = TRUE)

FeaturePlot(kerats, features = "Tmsb4x", label = TRUE)

# find markers for every cluster compared to all remaining cells, report only the positive ones using only.pos = TRUE
kerats.markers <- FindAllMarkers(kerats, only.pos = FALSE, min.pct = 0.25, logfc.threshold = 0.25)
Calculating cluster 0

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~05s          
  |++                                                | 2 % ~04s          
  |++                                                | 3 % ~04s          
  |+++                                               | 5 % ~05s          
  |+++                                               | 6 % ~04s          
  |++++                                              | 7 % ~05s          
  |+++++                                             | 8 % ~05s          
  |+++++                                             | 9 % ~05s          
  |++++++                                            | 10% ~05s          
  |++++++                                            | 11% ~04s          
  |+++++++                                           | 13% ~05s          
  |+++++++                                           | 14% ~05s          
  |++++++++                                          | 15% ~04s          
  |+++++++++                                         | 16% ~04s          
  |+++++++++                                         | 17% ~04s          
  |++++++++++                                        | 18% ~04s          
  |++++++++++                                        | 20% ~04s          
  |+++++++++++                                       | 21% ~04s          
  |+++++++++++                                       | 22% ~04s          
  |++++++++++++                                      | 23% ~04s          
  |+++++++++++++                                     | 24% ~04s          
  |+++++++++++++                                     | 25% ~03s          
  |++++++++++++++                                    | 26% ~03s          
  |++++++++++++++                                    | 28% ~03s          
  |+++++++++++++++                                   | 29% ~03s          
  |+++++++++++++++                                   | 30% ~03s          
  |++++++++++++++++                                  | 31% ~03s          
  |+++++++++++++++++                                 | 32% ~03s          
  |+++++++++++++++++                                 | 33% ~03s          
  |++++++++++++++++++                                | 34% ~03s          
  |++++++++++++++++++                                | 36% ~03s          
  |+++++++++++++++++++                               | 37% ~03s          
  |+++++++++++++++++++                               | 38% ~03s          
  |++++++++++++++++++++                              | 39% ~03s          
  |+++++++++++++++++++++                             | 40% ~03s          
  |+++++++++++++++++++++                             | 41% ~02s          
  |++++++++++++++++++++++                            | 43% ~02s          
  |++++++++++++++++++++++                            | 44% ~02s          
  |+++++++++++++++++++++++                           | 45% ~02s          
  |+++++++++++++++++++++++                           | 46% ~02s          
  |++++++++++++++++++++++++                          | 47% ~02s          
  |+++++++++++++++++++++++++                         | 48% ~02s          
  |+++++++++++++++++++++++++                         | 49% ~02s          
  |++++++++++++++++++++++++++                        | 51% ~02s          
  |++++++++++++++++++++++++++                        | 52% ~02s          
  |+++++++++++++++++++++++++++                       | 53% ~02s          
  |++++++++++++++++++++++++++++                      | 54% ~02s          
  |++++++++++++++++++++++++++++                      | 55% ~02s          
  |+++++++++++++++++++++++++++++                     | 56% ~02s          
  |+++++++++++++++++++++++++++++                     | 57% ~02s          
  |++++++++++++++++++++++++++++++                    | 59% ~02s          
  |++++++++++++++++++++++++++++++                    | 60% ~02s          
  |+++++++++++++++++++++++++++++++                   | 61% ~02s          
  |++++++++++++++++++++++++++++++++                  | 62% ~02s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~01s          
  |++++++++++++++++++++++++++++++++++                | 67% ~01s          
  |++++++++++++++++++++++++++++++++++                | 68% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 70% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=04s  
Calculating cluster 1

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~01s          
  |++                                                | 3 % ~01s          
  |++                                                | 4 % ~01s          
  |+++                                               | 5 % ~01s          
  |++++                                              | 6 % ~01s          
  |++++                                              | 8 % ~01s          
  |+++++                                             | 9 % ~01s          
  |++++++                                            | 10% ~01s          
  |++++++                                            | 12% ~01s          
  |+++++++                                           | 13% ~01s          
  |++++++++                                          | 14% ~01s          
  |++++++++                                          | 15% ~01s          
  |+++++++++                                         | 17% ~01s          
  |+++++++++                                         | 18% ~01s          
  |++++++++++                                        | 19% ~01s          
  |+++++++++++                                       | 21% ~01s          
  |+++++++++++                                       | 22% ~01s          
  |++++++++++++                                      | 23% ~01s          
  |+++++++++++++                                     | 24% ~01s          
  |+++++++++++++                                     | 26% ~01s          
  |++++++++++++++                                    | 27% ~01s          
  |+++++++++++++++                                   | 28% ~01s          
  |+++++++++++++++                                   | 29% ~01s          
  |++++++++++++++++                                  | 31% ~01s          
  |+++++++++++++++++                                 | 32% ~01s          
  |+++++++++++++++++                                 | 33% ~01s          
  |++++++++++++++++++                                | 35% ~01s          
  |++++++++++++++++++                                | 36% ~01s          
  |+++++++++++++++++++                               | 37% ~01s          
  |++++++++++++++++++++                              | 38% ~01s          
  |++++++++++++++++++++                              | 40% ~01s          
  |+++++++++++++++++++++                             | 41% ~01s          
  |++++++++++++++++++++++                            | 42% ~01s          
  |++++++++++++++++++++++                            | 44% ~01s          
  |+++++++++++++++++++++++                           | 45% ~01s          
  |++++++++++++++++++++++++                          | 46% ~01s          
  |++++++++++++++++++++++++                          | 47% ~01s          
  |+++++++++++++++++++++++++                         | 49% ~01s          
  |+++++++++++++++++++++++++                         | 50% ~01s          
  |++++++++++++++++++++++++++                        | 51% ~01s          
  |+++++++++++++++++++++++++++                       | 53% ~01s          
  |+++++++++++++++++++++++++++                       | 54% ~01s          
  |++++++++++++++++++++++++++++                      | 55% ~01s          
  |+++++++++++++++++++++++++++++                     | 56% ~01s          
  |+++++++++++++++++++++++++++++                     | 58% ~00s          
  |++++++++++++++++++++++++++++++                    | 59% ~00s          
  |+++++++++++++++++++++++++++++++                   | 60% ~00s          
  |+++++++++++++++++++++++++++++++                   | 62% ~00s          
  |++++++++++++++++++++++++++++++++                  | 63% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~00s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |++++++++++++++++++++++++++++++++++                | 68% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01s  
Calculating cluster 2

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~02s          
  |++                                                | 2 % ~01s          
  |++                                                | 4 % ~01s          
  |+++                                               | 5 % ~01s          
  |++++                                              | 6 % ~01s          
  |++++                                              | 7 % ~01s          
  |+++++                                             | 9 % ~01s          
  |+++++                                             | 10% ~01s          
  |++++++                                            | 11% ~01s          
  |+++++++                                           | 12% ~01s          
  |+++++++                                           | 13% ~01s          
  |++++++++                                          | 15% ~01s          
  |++++++++                                          | 16% ~01s          
  |+++++++++                                         | 17% ~01s          
  |++++++++++                                        | 18% ~01s          
  |++++++++++                                        | 20% ~01s          
  |+++++++++++                                       | 21% ~01s          
  |+++++++++++                                       | 22% ~01s          
  |++++++++++++                                      | 23% ~01s          
  |+++++++++++++                                     | 24% ~01s          
  |+++++++++++++                                     | 26% ~01s          
  |++++++++++++++                                    | 27% ~01s          
  |+++++++++++++++                                   | 28% ~01s          
  |+++++++++++++++                                   | 29% ~01s          
  |++++++++++++++++                                  | 30% ~01s          
  |++++++++++++++++                                  | 32% ~01s          
  |+++++++++++++++++                                 | 33% ~01s          
  |++++++++++++++++++                                | 34% ~01s          
  |++++++++++++++++++                                | 35% ~01s          
  |+++++++++++++++++++                               | 37% ~01s          
  |+++++++++++++++++++                               | 38% ~01s          
  |++++++++++++++++++++                              | 39% ~01s          
  |+++++++++++++++++++++                             | 40% ~01s          
  |+++++++++++++++++++++                             | 41% ~01s          
  |++++++++++++++++++++++                            | 43% ~01s          
  |++++++++++++++++++++++                            | 44% ~01s          
  |+++++++++++++++++++++++                           | 45% ~01s          
  |++++++++++++++++++++++++                          | 46% ~01s          
  |++++++++++++++++++++++++                          | 48% ~01s          
  |+++++++++++++++++++++++++                         | 49% ~01s          
  |+++++++++++++++++++++++++                         | 50% ~01s          
  |++++++++++++++++++++++++++                        | 51% ~01s          
  |+++++++++++++++++++++++++++                       | 52% ~01s          
  |+++++++++++++++++++++++++++                       | 54% ~01s          
  |++++++++++++++++++++++++++++                      | 55% ~01s          
  |+++++++++++++++++++++++++++++                     | 56% ~01s          
  |+++++++++++++++++++++++++++++                     | 57% ~01s          
  |++++++++++++++++++++++++++++++                    | 59% ~01s          
  |++++++++++++++++++++++++++++++                    | 60% ~01s          
  |+++++++++++++++++++++++++++++++                   | 61% ~01s          
  |++++++++++++++++++++++++++++++++                  | 62% ~01s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~00s          
  |++++++++++++++++++++++++++++++++++                | 67% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~00s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 84% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01s  
Calculating cluster 3

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~02s          
  |++                                                | 2 % ~02s          
  |++                                                | 3 % ~02s          
  |+++                                               | 5 % ~02s          
  |+++                                               | 6 % ~02s          
  |++++                                              | 7 % ~02s          
  |+++++                                             | 8 % ~01s          
  |+++++                                             | 9 % ~01s          
  |++++++                                            | 10% ~01s          
  |++++++                                            | 12% ~01s          
  |+++++++                                           | 13% ~01s          
  |+++++++                                           | 14% ~01s          
  |++++++++                                          | 15% ~01s          
  |+++++++++                                         | 16% ~01s          
  |+++++++++                                         | 17% ~01s          
  |++++++++++                                        | 19% ~01s          
  |++++++++++                                        | 20% ~01s          
  |+++++++++++                                       | 21% ~01s          
  |++++++++++++                                      | 22% ~01s          
  |++++++++++++                                      | 23% ~01s          
  |+++++++++++++                                     | 24% ~01s          
  |+++++++++++++                                     | 26% ~01s          
  |++++++++++++++                                    | 27% ~01s          
  |++++++++++++++                                    | 28% ~01s          
  |+++++++++++++++                                   | 29% ~01s          
  |++++++++++++++++                                  | 30% ~01s          
  |++++++++++++++++                                  | 31% ~01s          
  |+++++++++++++++++                                 | 33% ~01s          
  |+++++++++++++++++                                 | 34% ~01s          
  |++++++++++++++++++                                | 35% ~01s          
  |+++++++++++++++++++                               | 36% ~01s          
  |+++++++++++++++++++                               | 37% ~01s          
  |++++++++++++++++++++                              | 38% ~01s          
  |++++++++++++++++++++                              | 40% ~01s          
  |+++++++++++++++++++++                             | 41% ~01s          
  |+++++++++++++++++++++                             | 42% ~01s          
  |++++++++++++++++++++++                            | 43% ~01s          
  |+++++++++++++++++++++++                           | 44% ~01s          
  |+++++++++++++++++++++++                           | 45% ~01s          
  |++++++++++++++++++++++++                          | 47% ~01s          
  |++++++++++++++++++++++++                          | 48% ~01s          
  |+++++++++++++++++++++++++                         | 49% ~01s          
  |+++++++++++++++++++++++++                         | 50% ~01s          
  |++++++++++++++++++++++++++                        | 51% ~01s          
  |+++++++++++++++++++++++++++                       | 52% ~01s          
  |+++++++++++++++++++++++++++                       | 53% ~01s          
  |++++++++++++++++++++++++++++                      | 55% ~01s          
  |++++++++++++++++++++++++++++                      | 56% ~01s          
  |+++++++++++++++++++++++++++++                     | 57% ~01s          
  |++++++++++++++++++++++++++++++                    | 58% ~01s          
  |++++++++++++++++++++++++++++++                    | 59% ~01s          
  |+++++++++++++++++++++++++++++++                   | 60% ~01s          
  |+++++++++++++++++++++++++++++++                   | 62% ~01s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |++++++++++++++++++++++++++++++++                  | 64% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
  |++++++++++++++++++++++++++++++++++                | 66% ~01s          
  |++++++++++++++++++++++++++++++++++                | 67% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~00s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 72% ~00s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 74% ~00s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~00s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~00s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 86% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 94% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=02s  
Calculating cluster 4

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~15s          
  |++                                                | 2 % ~13s          
  |++                                                | 3 % ~12s          
  |+++                                               | 4 % ~12s          
  |+++                                               | 5 % ~11s          
  |++++                                              | 6 % ~11s          
  |++++                                              | 7 % ~11s          
  |+++++                                             | 8 % ~11s          
  |+++++                                             | 9 % ~11s          
  |++++++                                            | 10% ~10s          
  |++++++                                            | 11% ~10s          
  |+++++++                                           | 12% ~10s          
  |+++++++                                           | 13% ~10s          
  |++++++++                                          | 14% ~10s          
  |++++++++                                          | 15% ~10s          
  |+++++++++                                         | 16% ~10s          
  |+++++++++                                         | 17% ~10s          
  |++++++++++                                        | 18% ~09s          
  |++++++++++                                        | 19% ~09s          
  |+++++++++++                                       | 20% ~09s          
  |+++++++++++                                       | 21% ~09s          
  |++++++++++++                                      | 22% ~09s          
  |++++++++++++                                      | 23% ~09s          
  |+++++++++++++                                     | 24% ~09s          
  |+++++++++++++                                     | 25% ~09s          
  |++++++++++++++                                    | 26% ~09s          
  |++++++++++++++                                    | 27% ~09s          
  |+++++++++++++++                                   | 28% ~09s          
  |+++++++++++++++                                   | 29% ~09s          
  |++++++++++++++++                                  | 30% ~08s          
  |++++++++++++++++                                  | 31% ~08s          
  |+++++++++++++++++                                 | 32% ~08s          
  |+++++++++++++++++                                 | 33% ~08s          
  |++++++++++++++++++                                | 34% ~08s          
  |++++++++++++++++++                                | 35% ~08s          
  |+++++++++++++++++++                               | 36% ~08s          
  |+++++++++++++++++++                               | 37% ~07s          
  |++++++++++++++++++++                              | 38% ~07s          
  |++++++++++++++++++++                              | 39% ~07s          
  |+++++++++++++++++++++                             | 40% ~07s          
  |+++++++++++++++++++++                             | 41% ~07s          
  |++++++++++++++++++++++                            | 42% ~07s          
  |++++++++++++++++++++++                            | 43% ~07s          
  |+++++++++++++++++++++++                           | 44% ~07s          
  |+++++++++++++++++++++++                           | 45% ~06s          
  |++++++++++++++++++++++++                          | 46% ~06s          
  |++++++++++++++++++++++++                          | 47% ~06s          
  |+++++++++++++++++++++++++                         | 48% ~06s          
  |+++++++++++++++++++++++++                         | 49% ~06s          
  |++++++++++++++++++++++++++                        | 51% ~06s          
  |++++++++++++++++++++++++++                        | 52% ~06s          
  |+++++++++++++++++++++++++++                       | 53% ~06s          
  |+++++++++++++++++++++++++++                       | 54% ~05s          
  |++++++++++++++++++++++++++++                      | 55% ~05s          
  |++++++++++++++++++++++++++++                      | 56% ~05s          
  |+++++++++++++++++++++++++++++                     | 57% ~05s          
  |+++++++++++++++++++++++++++++                     | 58% ~05s          
  |++++++++++++++++++++++++++++++                    | 59% ~05s          
  |++++++++++++++++++++++++++++++                    | 60% ~05s          
  |+++++++++++++++++++++++++++++++                   | 61% ~05s          
  |+++++++++++++++++++++++++++++++                   | 62% ~05s          
  |++++++++++++++++++++++++++++++++                  | 63% ~04s          
  |++++++++++++++++++++++++++++++++                  | 64% ~04s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~04s          
  |+++++++++++++++++++++++++++++++++                 | 66% ~04s          
  |++++++++++++++++++++++++++++++++++                | 67% ~04s          
  |++++++++++++++++++++++++++++++++++                | 68% ~04s          
  |+++++++++++++++++++++++++++++++++++               | 69% ~04s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~04s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~03s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~03s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~03s          
  |++++++++++++++++++++++++++++++++++++++            | 76% ~03s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~03s          
  |+++++++++++++++++++++++++++++++++++++++           | 78% ~03s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~02s          
  |++++++++++++++++++++++++++++++++++++++++          | 80% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 81% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~02s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~02s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 88% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 90% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 92% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 94% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=12s  
Calculating cluster 5

  |                                                  | 0 % ~calculating  
  |+                                                 | 1 % ~03s          
  |++                                                | 2 % ~03s          
  |++                                                | 3 % ~03s          
  |+++                                               | 4 % ~03s          
  |+++                                               | 5 % ~03s          
  |++++                                              | 7 % ~03s          
  |++++                                              | 8 % ~04s          
  |+++++                                             | 9 % ~04s          
  |+++++                                             | 10% ~04s          
  |++++++                                            | 11% ~04s          
  |++++++                                            | 12% ~03s          
  |+++++++                                           | 13% ~03s          
  |++++++++                                          | 14% ~03s          
  |++++++++                                          | 15% ~03s          
  |+++++++++                                         | 16% ~03s          
  |+++++++++                                         | 17% ~03s          
  |++++++++++                                        | 18% ~03s          
  |++++++++++                                        | 20% ~03s          
  |+++++++++++                                       | 21% ~03s          
  |+++++++++++                                       | 22% ~03s          
  |++++++++++++                                      | 23% ~03s          
  |++++++++++++                                      | 24% ~03s          
  |+++++++++++++                                     | 25% ~03s          
  |++++++++++++++                                    | 26% ~02s          
  |++++++++++++++                                    | 27% ~02s          
  |+++++++++++++++                                   | 28% ~02s          
  |+++++++++++++++                                   | 29% ~02s          
  |++++++++++++++++                                  | 30% ~02s          
  |++++++++++++++++                                  | 32% ~02s          
  |+++++++++++++++++                                 | 33% ~02s          
  |+++++++++++++++++                                 | 34% ~02s          
  |++++++++++++++++++                                | 35% ~02s          
  |++++++++++++++++++                                | 36% ~02s          
  |+++++++++++++++++++                               | 37% ~02s          
  |++++++++++++++++++++                              | 38% ~02s          
  |++++++++++++++++++++                              | 39% ~02s          
  |+++++++++++++++++++++                             | 40% ~02s          
  |+++++++++++++++++++++                             | 41% ~02s          
  |++++++++++++++++++++++                            | 42% ~02s          
  |++++++++++++++++++++++                            | 43% ~02s          
  |+++++++++++++++++++++++                           | 45% ~02s          
  |+++++++++++++++++++++++                           | 46% ~02s          
  |++++++++++++++++++++++++                          | 47% ~02s          
  |++++++++++++++++++++++++                          | 48% ~02s          
  |+++++++++++++++++++++++++                         | 49% ~02s          
  |+++++++++++++++++++++++++                         | 50% ~02s          
  |++++++++++++++++++++++++++                        | 51% ~01s          
  |+++++++++++++++++++++++++++                       | 52% ~01s          
  |+++++++++++++++++++++++++++                       | 53% ~01s          
  |++++++++++++++++++++++++++++                      | 54% ~01s          
  |++++++++++++++++++++++++++++                      | 55% ~01s          
  |+++++++++++++++++++++++++++++                     | 57% ~01s          
  |+++++++++++++++++++++++++++++                     | 58% ~01s          
  |++++++++++++++++++++++++++++++                    | 59% ~01s          
  |++++++++++++++++++++++++++++++                    | 60% ~01s          
  |+++++++++++++++++++++++++++++++                   | 61% ~01s          
  |+++++++++++++++++++++++++++++++                   | 62% ~01s          
  |++++++++++++++++++++++++++++++++                  | 63% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 64% ~01s          
  |+++++++++++++++++++++++++++++++++                 | 65% ~01s          
  |++++++++++++++++++++++++++++++++++                | 66% ~01s          
  |++++++++++++++++++++++++++++++++++                | 67% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 68% ~01s          
  |+++++++++++++++++++++++++++++++++++               | 70% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 71% ~01s          
  |++++++++++++++++++++++++++++++++++++              | 72% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 73% ~01s          
  |+++++++++++++++++++++++++++++++++++++             | 74% ~01s          
  |++++++++++++++++++++++++++++++++++++++            | 75% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 76% ~01s          
  |+++++++++++++++++++++++++++++++++++++++           | 77% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 78% ~01s          
  |++++++++++++++++++++++++++++++++++++++++          | 79% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 80% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++         | 82% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 83% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++        | 84% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 85% ~01s          
  |+++++++++++++++++++++++++++++++++++++++++++       | 86% ~01s          
  |++++++++++++++++++++++++++++++++++++++++++++      | 87% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 88% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++     | 89% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 90% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++    | 91% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 92% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++   | 93% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 95% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++  | 96% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~00s          
  |+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~00s          
  |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=04s  
kerats.markers %>% group_by(cluster) %>% top_n(n = 2, wt = avg_log2FC)

cluster_markers <- kerats.markers %>% group_by(cluster) %>% filter(!between(avg_log2FC, -0.6, 0.6) & p_val_adj < 0.05)


top_markers <- kerats.markers %>% group_by(cluster) %>% filter(!between(avg_log2FC, -1, 1) & p_val_adj < 0.05)

#write out markers to excel file. Cosnider using CSV as these are easier to manipulate.

write.xlsx(cluster_markers,"refined_kerats_allcluster_markers.xlsx")
# https://scrnaseq-course.cog.sanger.ac.uk/website/seurat-chapter.html
# has a tutorial explaining these things
LS0tCnRpdGxlOiAiTVBEQl9rZXJhdHNfb25seV9hbmFseXNpcyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CiN0aGVzZSBsaWJyYXJpZXMgYXJlIHBvcnRlZCBoZXJlIGluIGNhc2UgeW91IHJlbW92ZSB0aGUgY29kZSBhbmQgcGxhY2UgZWxzZXdoZXJlLgojIGluc3RhbGwucGFja2FnZXMoJ1NpZ25hYycsJ1NldXJhdCcpICMgVGhlc2UgcGFja2FnZXMgb2Z0ZW4gYXBwZWFyIHRvIGJlIG91dGRhdGVkL2Jyb2tlbiwgc28gdGhpcyBsaW5lIGVuc3VyZXMgdXAgdG8gZGF0ZSBsaWJyYXJpZXMgYmVmb3JlIGNvZGUgcnVubmluZy4gCgoKI0xvYWQgTGlicmFyaWVzCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KHBhdGNod29yaykKbGlicmFyeShkYXRhLnRhYmxlKQpsaWJyYXJ5KHN0cmluZ3IpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShnZ3B1YnIpCmxpYnJhcnkob3Blbnhsc3gpCmBgYAoKCmBgYHtyfQojIHNldCB3b3JraW5nIGRpcmVjdG9yeQojc2V0IHdvcmtpbmcgZGlyZWN0b3J5IApzZXR3ZCgifi9PbmVEcml2ZSAtIFF1ZWVuIE1hcnksIFVuaXZlcnNpdHkgb2YgTG9uZG9uL1FNVUwvTGFiL0NvZGluZy9kYXRhL1IvU3BhdGlhbC9TY3JpcHRzIikKCiMgbG9hZCAucmRzIGZpbGUgd2l0aCBwcmUtZmlsdGVyZWQgZGF0YS4gCmtlcmF0cyA8LSByZWFkUkRTKGZpbGUgPSAia2VyYXRpbm9jeXRlc19vbmx5LnJkcyIpCgprZXJhdHMKYGBgCgpgYGB7cn0KIyBWaXN1YWxpemUgUUMgbWV0cmljcyBhcyBhIHZpb2xpbiBwbG90ClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIm5GZWF0dXJlX1JOQSIsICJuQ291bnRfUk5BIiwgInBlcmNlbnQubXQiKSwgbmNvbCA9IDMpCgpzdW1tYXJ5KGtlcmF0c0BtZXRhLmRhdGEpCmBgYAoKYGBge3J9CgojcnVuIHRoZSBQQ0EgYW5hbHlzaXMgb2YgdGhlIGRhdGFzZXQKa2VyYXRzIDwtIFJ1blBDQShrZXJhdHMsIGZlYXR1cmVzID0gVmFyaWFibGVGZWF0dXJlcyhvYmplY3QgPSBrZXJhdHMpKQoKIyBFeGFtaW5lIGFuZCB2aXN1YWxpemUgUENBIHJlc3VsdHMgYSBmZXcgZGlmZmVyZW50IHdheXMKcHJpbnQoa2VyYXRzW1sicGNhIl1dLCBkaW1zID0gMTo1LCBuZmVhdHVyZXMgPSA1KQpgYGAKCgpgYGB7cn0KCiNlbGJvdyBwbG90ICwgc2hvd3MgU0Qgb2YgUENzLCBlbGJvdyBpcyB3aGVyZSBzaWduaWZpY2FuY2Ugc2hvdWxkIGJlZ2luIHRvIGJlIG5lZ2xpZ2libGUuCkVsYm93UGxvdChrZXJhdHMpCgojcGljayA0IFBDcwpgYGAKYGBge3J9CiNIZXJlIGlzIHdoZXJlIHdlIG9wdGltaXNlIHRoZSBudW1iZXIgb2YgUENzIHVzZWQgdG8gY2x1c3RlciB0aGUgY2VsbHMsIGFuZCB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgY2x1c3RlcmluZyBhbGdvcml0aG0uCmtlcmF0cyA8LSBGaW5kTmVpZ2hib3JzKGtlcmF0cywgZGltcyA9IDE6NCkKa2VyYXRzIDwtIEZpbmRDbHVzdGVycyhrZXJhdHMsIHJlc29sdXRpb24gPSAwLjUpCgpoZWFkKElkZW50cyhrZXJhdHMpLCA1KQpgYGAKCmBgYHtyfQojUGxvdCBVTUFQCmtlcmF0cyA8LSBSdW5VTUFQKGtlcmF0cywgZGltcyA9IDE6NSkKRGltUGxvdChrZXJhdHMsIHJlZHVjdGlvbiA9ICJ1bWFwIikKRGltUGxvdChrZXJhdHMsIHJlZHVjdGlvbiA9ICJwY2EiKQpgYGAKYGBge3J9CiMgZmluZCBtYXJrZXJzIGZvciBldmVyeSBjbHVzdGVyIGNvbXBhcmVkIHRvIGFsbCByZW1haW5pbmcgY2VsbHMsIHJlcG9ydCBvbmx5IHRoZSBwb3NpdGl2ZSBvbmVzIHVzaW5nIG9ubHkucG9zID0gVFJVRQprZXJhdHMubWFya2VycyA8LSBGaW5kQWxsTWFya2VycyhrZXJhdHMsIG9ubHkucG9zID0gRkFMU0UsIG1pbi5wY3QgPSAwLjI1LCBsb2dmYy50aHJlc2hvbGQgPSAwLjI1KQprZXJhdHMubWFya2VycyAlPiUgZ3JvdXBfYnkoY2x1c3RlcikgJT4lIHRvcF9uKG4gPSAyLCB3dCA9IGF2Z19sb2cyRkMpCgpjbHVzdGVyX21hcmtlcnMgPC0ga2VyYXRzLm1hcmtlcnMgJT4lIGdyb3VwX2J5KGNsdXN0ZXIpICU+JSBmaWx0ZXIoIWJldHdlZW4oYXZnX2xvZzJGQywgLTAuNiwgMC42KSAmIHBfdmFsX2FkaiA8IDAuMDUpCgoKdG9wX21hcmtlcnMgPC0ga2VyYXRzLm1hcmtlcnMgJT4lIGdyb3VwX2J5KGNsdXN0ZXIpICU+JSBmaWx0ZXIoIWJldHdlZW4oYXZnX2xvZzJGQywgLTEsIDEpICYgcF92YWxfYWRqIDwgMC4wNSkKCiN3cml0ZSBvdXQgbWFya2VycyB0byBleGNlbCBmaWxlLiBDb3NuaWRlciB1c2luZyBDU1YgYXMgdGhlc2UgYXJlIGVhc2llciB0byBtYW5pcHVsYXRlLgoKd3JpdGUueGxzeChjbHVzdGVyX21hcmtlcnMsImtlcmF0c19hbGxjbHVzdGVyX21hcmtlcnMueGxzeCIpCiMgaHR0cHM6Ly9zY3JuYXNlcS1jb3Vyc2UuY29nLnNhbmdlci5hYy51ay93ZWJzaXRlL3NldXJhdC1jaGFwdGVyLmh0bWwKIyBoYXMgYSB0dXRvcmlhbCBleHBsYWluaW5nIHRoZXNlIHRoaW5ncwpgYGAKCgpgYGB7cn0KI0xvd2VyIEtlcmF0aW5vY3l0ZSBtYXJrZXJzClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIktydDEwIikpClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIktydDEiKSkKVmxuUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gYygiRHNwIikpClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIktydDE0IikpCgpgYGAKYGBge3J9CiN1cHBlciBlcGlkZXJtaXMKVmxuUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gYygiTG9yIikpClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIkZsZyIpKQpWbG5QbG90KGtlcmF0cywgZmVhdHVyZXMgPSBjKCJIcm5yIikpClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIkNkc24iKSkKVmxuUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gYygiSXZsIikpClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIlNsdXJwMSIpKQpWbG5QbG90KGtlcmF0cywgZmVhdHVyZXMgPSBjKCJDcm5uIikpCmBgYApgYGB7cn0KRGltUGxvdChrZXJhdHMpCkZlYXR1cmVQbG90KGtlcmF0cywgZmVhdHVyZXMgPSAiTG9yIiwgbGFiZWwgPSBUUlVFKQpGZWF0dXJlUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gIkZsZyIsIGxhYmVsID0gVFJVRSkKCgpGZWF0dXJlUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gIkxjZTFtIiwgbGFiZWwgPSBUUlVFKQoKRmVhdHVyZVBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9ICJUcnA2MyIsIGxhYmVsID0gVFJVRSkKYGBgCmBgYHtyfQojYWN0aW4gYmluZGluZyBnZW5lcyBhbmQgR09JcwpWbG5QbG90KGtlcmF0cywgZmVhdHVyZXMgPSBjKCJTcHRibjIiKSkKVmxuUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gYygiQW1vdGwyIikpClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIkFueGExIikpClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIlRtc2I0eCIpKQoKVmxuUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gYygiTG1uYSIpKQoKCgoKCmBgYApgYGB7cn0KRGltUGxvdChrZXJhdHMpCkZlYXR1cmVQbG90KGtlcmF0cywgZmVhdHVyZXMgPSAiU3B0Ym4yIiwgbGFiZWwgPSBUUlVFKQpGZWF0dXJlUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gIkFtb3RsMiIsIGxhYmVsID0gVFJVRSkKCgpGZWF0dXJlUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gIlRtc2I0eCIsIGxhYmVsID0gVFJVRSkKCkZlYXR1cmVQbG90KGtlcmF0cywgZmVhdHVyZXMgPSAiQW54YTEiLCBsYWJlbCA9IFRSVUUpCmBgYAoKYGBge3J9CmtlcmF0X21hcmtlcl9nZW5lIDwtICJMb3IiCmxpc3Rfb2ZfZmVhdHVyZXMgPC0gYygiU3B0Ym4yIiwiVG1zYjR4IiwiQW1vdGwyIiwiQW54YTEiKQoKIyBQYXJzZSBsaXN0X29mX2ZlYXR1cmVzIHRvIGZlYXR1cmVzY2F0dGVyCgpmb3IgKGdlbmUgaW4gbGlzdF9vZl9mZWF0dXJlcyl7CgogIHAgPC0gRmVhdHVyZVNjYXR0ZXIoa2VyYXRzLCBmZWF0dXJlMSA9IChrZXJhdF9tYXJrZXJfZ2VuZSksIGZlYXR1cmUyID0gKGdlbmUpKQogIHByaW50KHApCn0KCiMgVXNlIHRoaXMgbGluZSB0byBzZWUgc2luZ2xlIGZlYXR1cmUgcGxvdCwgZm9yIGVhc2UuIAojRmVhdHVyZVNjYXR0ZXIoa2VyYXRzLCBmZWF0dXJlMSA9IGtlcmF0X21hcmtlcl9nZW5lLCBmZWF0dXJlMiA9ICJTcHRibjIiKQpgYGAKCgoKYGBge3J9CiMgI0Rlcm1hbCBGaWIgbWFya2VycwojICMgaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wbWMvYXJ0aWNsZXMvUE1DNjIwNDQzOC8jOn46dGV4dD1UaGVzZSUyMGRpZmZlcmVudCUyMGRlcm1hbCUyMGZpYnJvYmxhc3QlMjBjZWxsLGV0JTIwYWwuJTJDJTIwMjAxOCkuCiMgVmxuUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gYygiRHBwNCIpKSAjQ0QyNgojIAojIFZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIlRoeTEiKSkgI0NEOTAgLSBkZXJtYWwgZmliIG1hcmtlcgojIFZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIlZpbSIpKQojIAojICNjbHVzdGVyIDQgaXMgZmlicm9ibGFzdHMsIG5lZWQgdG8gcmVtb3ZlLiAKYGBgCgpgYGB7cn0KIyAjU0VUIElERU5UUyBUSEFUIEFSRSBUTyBCRSBSRU1PVkVEIEJBU0VEIE9OIFRISVMgSU5GTwojIGV4dHJhY3RlZF9jbHVzdGVycyA8LSBjKCIwIiwgIjEiLCAiMiIsICIzIiwgIjUiKQojIAojICNzdWJzZXQgc2V1cmF0IG9iamVjdAojIGtlcmF0aW5vY3l0ZXMgPC0gc3Vic2V0KGtlcmF0cywgaWRlbnRzID0gZXh0cmFjdGVkX2NsdXN0ZXJzKQojIGtlcmF0aW5vY3l0ZXMKIyAKIyBzYXZlUkRTKGtlcmF0aW5vY3l0ZXMsIGZpbGUgPSAia2VyYXRpbm9jeXRlc19vbmx5LnJkcyIpCmBgYAoKCmBgYHtyfQojIHNldCB3b3JraW5nIGRpcmVjdG9yeQojc2V0IHdvcmtpbmcgZGlyZWN0b3J5IApzZXR3ZCgifi9PbmVEcml2ZSAtIFF1ZWVuIE1hcnksIFVuaXZlcnNpdHkgb2YgTG9uZG9uL1FNVUwvTGFiL0NvZGluZy9kYXRhL1IvU3BhdGlhbC9TY3JpcHRzIikKCiMgbG9hZCAucmRzIGZpbGUgd2l0aCBwcmUtZmlsdGVyZWQgZGF0YS4gCmtlcmF0cyA8LSByZWFkUkRTKGZpbGUgPSAia2VyYXRpbm9jeXRlc19vbmx5LnJkcyIpCgprZXJhdHMKYGBgCgpgYGB7cn0KIyBWaXN1YWxpemUgUUMgbWV0cmljcyBhcyBhIHZpb2xpbiBwbG90ClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIm5GZWF0dXJlX1JOQSIsICJuQ291bnRfUk5BIiwgInBlcmNlbnQubXQiKSwgbmNvbCA9IDMpCgpzdW1tYXJ5KGtlcmF0c0BtZXRhLmRhdGEpCmBgYAoKYGBge3J9CgojcnVuIHRoZSBQQ0EgYW5hbHlzaXMgb2YgdGhlIGRhdGFzZXQKa2VyYXRzIDwtIFJ1blBDQShrZXJhdHMsIGZlYXR1cmVzID0gVmFyaWFibGVGZWF0dXJlcyhvYmplY3QgPSBrZXJhdHMpKQoKIyBFeGFtaW5lIGFuZCB2aXN1YWxpemUgUENBIHJlc3VsdHMgYSBmZXcgZGlmZmVyZW50IHdheXMKcHJpbnQoa2VyYXRzW1sicGNhIl1dLCBkaW1zID0gMTo1LCBuZmVhdHVyZXMgPSA1KQpgYGAKCgpgYGB7cn0KCiNlbGJvdyBwbG90ICwgc2hvd3MgU0Qgb2YgUENzLCBlbGJvdyBpcyB3aGVyZSBzaWduaWZpY2FuY2Ugc2hvdWxkIGJlZ2luIHRvIGJlIG5lZ2xpZ2libGUuCkVsYm93UGxvdChrZXJhdHMpCgojcGljayA2IFBDcwpgYGAKYGBge3J9CiNIZXJlIGlzIHdoZXJlIHdlIG9wdGltaXNlIHRoZSBudW1iZXIgb2YgUENzIHVzZWQgdG8gY2x1c3RlciB0aGUgY2VsbHMsIGFuZCB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgY2x1c3RlcmluZyBhbGdvcml0aG0uCmtlcmF0cyA8LSBGaW5kTmVpZ2hib3JzKGtlcmF0cywgZGltcyA9IDE6NikKa2VyYXRzIDwtIEZpbmRDbHVzdGVycyhrZXJhdHMsIHJlc29sdXRpb24gPSAwLjUpCgpoZWFkKElkZW50cyhrZXJhdHMpLCA1KQpgYGAKCmBgYHtyfQojUGxvdCBVTUFQCmtlcmF0cyA8LSBSdW5VTUFQKGtlcmF0cywgZGltcyA9IDE6NSkKRGltUGxvdChrZXJhdHMsIHJlZHVjdGlvbiA9ICJ1bWFwIikKRGltUGxvdChrZXJhdHMsIHJlZHVjdGlvbiA9ICJwY2EiKQpgYGAKCmBgYHtyfQojS2VyYXRpbm9jeXRlIG1hcmtlcnMKVmxuUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gYygiTG9yIikpClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIkl2bCIpKQpWbG5QbG90KGtlcmF0cywgZmVhdHVyZXMgPSBjKCJGbGciKSkKClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIktydDEwIikpClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIktydDUiKSkKVmxuUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gYygiU2x1cnAxIikpClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIkNybm4iKSkKCgoKYGBgCgpgYGB7cn0KI0tlcmF0aW5vY3l0ZSBtYXJrZXJzClZsblBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9IGMoIlNwdGJuMiIpKQpWbG5QbG90KGtlcmF0cywgZmVhdHVyZXMgPSBjKCJBbW90bDIiKSkKVmxuUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gYygiQW54YTEiKSkKVmxuUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gYygiVG1zYjR4IikpCgpWbG5QbG90KGtlcmF0cywgZmVhdHVyZXMgPSBjKCJMbW5hIikpCgoKCgoKYGBgCmBgYHtyfQpEaW1QbG90KGtlcmF0cykKRmVhdHVyZVBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9ICJMb3IiLCBsYWJlbCA9IFRSVUUpCkZlYXR1cmVQbG90KGtlcmF0cywgZmVhdHVyZXMgPSAiRmxnIiwgbGFiZWwgPSBUUlVFKQoKCkZlYXR1cmVQbG90KGtlcmF0cywgZmVhdHVyZXMgPSAiTGNlMW0iLCBsYWJlbCA9IFRSVUUpCgpGZWF0dXJlUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gIlRycDYzIiwgbGFiZWwgPSBUUlVFKQpgYGAKYGBge3J9CkRpbVBsb3Qoa2VyYXRzKQpGZWF0dXJlUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gIkFueGExIiwgbGFiZWwgPSBUUlVFKQpGZWF0dXJlUGxvdChrZXJhdHMsIGZlYXR1cmVzID0gIlNwdGJuMiIsIGxhYmVsID0gVFJVRSkKRmVhdHVyZVBsb3Qoa2VyYXRzLCBmZWF0dXJlcyA9ICJBbW90bDIiLCBsYWJlbCA9IFRSVUUpCkZlYXR1cmVQbG90KGtlcmF0cywgZmVhdHVyZXMgPSAiVG1zYjR4IiwgbGFiZWwgPSBUUlVFKQpgYGAKCmBgYHtyfQojIGZpbmQgbWFya2VycyBmb3IgZXZlcnkgY2x1c3RlciBjb21wYXJlZCB0byBhbGwgcmVtYWluaW5nIGNlbGxzLCByZXBvcnQgb25seSB0aGUgcG9zaXRpdmUgb25lcyB1c2luZyBvbmx5LnBvcyA9IFRSVUUKa2VyYXRzLm1hcmtlcnMgPC0gRmluZEFsbE1hcmtlcnMoa2VyYXRzLCBvbmx5LnBvcyA9IEZBTFNFLCBtaW4ucGN0ID0gMC4yNSwgbG9nZmMudGhyZXNob2xkID0gMC4yNSkKa2VyYXRzLm1hcmtlcnMgJT4lIGdyb3VwX2J5KGNsdXN0ZXIpICU+JSB0b3BfbihuID0gMiwgd3QgPSBhdmdfbG9nMkZDKQoKY2x1c3Rlcl9tYXJrZXJzIDwtIGtlcmF0cy5tYXJrZXJzICU+JSBncm91cF9ieShjbHVzdGVyKSAlPiUgZmlsdGVyKCFiZXR3ZWVuKGF2Z19sb2cyRkMsIC0wLjYsIDAuNikgJiBwX3ZhbF9hZGogPCAwLjA1KQoKCnRvcF9tYXJrZXJzIDwtIGtlcmF0cy5tYXJrZXJzICU+JSBncm91cF9ieShjbHVzdGVyKSAlPiUgZmlsdGVyKCFiZXR3ZWVuKGF2Z19sb2cyRkMsIC0xLCAxKSAmIHBfdmFsX2FkaiA8IDAuMDUpCgojd3JpdGUgb3V0IG1hcmtlcnMgdG8gZXhjZWwgZmlsZS4gQ29zbmlkZXIgdXNpbmcgQ1NWIGFzIHRoZXNlIGFyZSBlYXNpZXIgdG8gbWFuaXB1bGF0ZS4KCndyaXRlLnhsc3goY2x1c3Rlcl9tYXJrZXJzLCJyZWZpbmVkX2tlcmF0c19hbGxjbHVzdGVyX21hcmtlcnMueGxzeCIpCiMgaHR0cHM6Ly9zY3JuYXNlcS1jb3Vyc2UuY29nLnNhbmdlci5hYy51ay93ZWJzaXRlL3NldXJhdC1jaGFwdGVyLmh0bWwKIyBoYXMgYSB0dXRvcmlhbCBleHBsYWluaW5nIHRoZXNlIHRoaW5ncwpgYGA=